/**
 * 统计指定目录中文件总大小.
 * 要考虑目录中还有子目录的情况. 可以同步编码, 异步更好.
 */
const fs = require('fs')
const { resolve } = require('path')
const path = require('path')

// 存放总大小
let totalSize = 0

function calc(url, need = true, cb) {
  // 获取文件的绝对路径
  let absPath = path.join(need ? __dirname : '', url)
  // 获取路径信息
  fs.stat(absPath, (err, statObj) => {
    // 是否是文件
    const isFile = statObj.isFile()
    if (isFile) {
      // 如果是文件,直接累加 size
      totalSize += statObj.size
      cb && cb(totalSize)
    } else {
      // 如果是目录, 获取目录信息
      fs.readdir(absPath, (err, dirs) => {
        // 循环目录信息递归调用计算方法
        dirs.forEach((item) => {
          calc(path.join(absPath, item), false)
        })
      })
    }
  })
}

calc('test', true, (res) => {
  console.info(res)
})
